/*
 * Copyright (c) 2010 CCX(China) Co.,Ltd. All Rights Reserved.
 *
 * This software is the confidential and proprietary information of
 * CCX(China) Co.,Ltd. ("Confidential Information").
 * It may not be copied or reproduced in any manner without the express 
 * written permission of CCX(China) Co.,Ltd.
 *
 * Author: zhaosj
 * Date: 2011-5-6 下午03:35:02
 */
package com.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

/**
 * @author zhaosj
 * 
 */
public class TestMap {

	public static void main(String[] args) {
		Map<String, Student> map = new HashMap<String, Student>();
		Student s1 = new Student("宋江", "1001", 38);
		Student s2 = new Student("卢俊义", "1002", 35);
		Student s3 = new Student("吴用", "1003", 34);

		map.put("1001", s1);
		map.put("1002", s2);
		map.put("1003", s3);
		
		Map<String, Student> subMap = new HashMap<String, Student>();
		subMap.put("1008", new Student("tom", "1008", 12));
		subMap.put("1009", new Student("jerry", "1009", 10));
		map.putAll(subMap);

		work(map);
		workByKeySet(map);
		workByEntry(map);
	}

	// 最常规的一种遍历方法，最常规就是最常用的，虽然不复杂，但很重要，这是我们最熟悉的，就不多说了！！

	public static void work(Map<String, Student> map) {
		Collection<Student> c = map.values();
		Iterator it = c.iterator();
		for (; it.hasNext();) {
			System.out.println(it.next());
		}
	}

	// 利用keyset进行遍历，它的优点在于可以根据你所想要的key值得到你想要的 values，更具灵活性！！

	public static void workByKeySet(Map<String, Student> map) {
		Set<String> key = map.keySet();
		
		for (Iterator it = key.iterator(); it.hasNext();) {
			String s = (String) it.next();
			System.out.println(map.get(s));
		}
	}

	// 比较复杂的一种遍历在这里，呵呵~~他很暴力哦，它的灵活性太强了，想得到什么就能得到什么~~

	public static void workByEntry(Map<String, Student> map) {
		Set<Map.Entry<String, Student>> set = map.entrySet();
		for (Iterator<Map.Entry<String, Student>> it = set.iterator(); it.hasNext();) {
			Map.Entry<String, Student> entry = (Map.Entry<String, Student>) it.next();
			System.out.println(entry.getKey() + "--->" + entry.getValue());
		}
	}
}

class Student {

	private String name;
	private String id;
	private int age;

	public Student(String name, String id, int age) {
		this.name = name;
		this.id = id;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student{" + "name=" + name + "id=" + id + "age=" + age + '}';
	}

}
